/**********************************************************************************************/
/* FBL_File_Mac.h																		 	  */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006                                        					  */
/* All Rights Reserved.                                                 					  */
/**********************************************************************************************/

#ifndef _FBL_File_Mac_h 
	#define _FBL_File_Mac_h
#pragma once

#include <VShared/FBL/publ/File_OS/FBL_File.h>

#include <VShared/FBL/publ/Headers/FBL_pre_header.h>


/**********************************************************************************************/
#if FBL_MAC

#if !__MACH__
	#include <StandardFile.h>
#endif // __MACH__


/**********************************************************************************************/
FBL_Begin_Namespace


/**********************************************************************************************/
SMART_CLASS( File_Mac );


/**********************************************************************************************/
class FBL_SHARED_EXP_CLASS File_Mac : public File
{
		IMPLEMENT_UNKNOWN(File_Mac)											
		BEGIN_INTERFACE_TABLE(File_Mac)										
			IMPLEMENT_INTERFACE(I_File)
			IMPLEMENT_INTERFACE(I_AspectHost)
		END_INTERFACE_TABLE()

    public://///////////////////////////////////////////////////////////////////////////////////

							File_Mac( 
								OSType 			inCreator 	= '????',
								OSType 			inFileType  = '????' );
							
virtual						~File_Mac( void );


    public://///////////////////////////////////////////////////////////////////////////////////

// I_Storage

virtual bool  		   		get_IsOpen( void ) const throw()		{ return bool(mRefNum != 0); }				
virtual	bool				get_IsReadOnly( void ) const throw()	{ return mReadOnly; }

virtual void 				Flush( void );


	protected:////////////////////////////////////////////////////////////////////////////////// 

// File

virtual void          		DoClose( void );
virtual void				DoCreate( void );

virtual flength				DoGetLengthOfClosed( void ) const throw();
virtual flength				DoGetLengthOfOpened( void ) const throw();

virtual void          		DoOpen ( void );
virtual void				DoPutLength( flength aLength );
virtual void				DoThrowOut( void );

virtual ulong				DoRead(
								char* 		inBuffer,
								flength		inFrom, 
								ulong 		inHowMuch );
								
virtual ulong				DoWrite( 
								const char* inBuffer,
								flength		inFrom, 
								ulong 		inHowMuch );


    public://///////////////////////////////////////////////////////////////////////////////////

// File_Mac

		// MacCreator and MacType should be assigned before you create() file. 

		OSType				get_MacCreator( void ) const throw() { return mMacCreator; }
		void				put_MacCreator( OSType inMacCreator ) throw() 
								{ mMacCreator = inMacCreator; } 

		OSType				get_MacType( void ) const throw() { return mMacType; }
		void				put_MacType( OSType inMacType ) throw() 
								{ mMacType = inMacType; } 

//#if !FBL_MAC_MACHO
		const FSSpec*		GetSpec( void ) const;
//#endif // !FBL_MAC_MACHO

		flength				GetPos( void ) const throw();
		void				SetPos( flength pos ) throw();


	private:////////////////////////////////////////////////////////////////////////////////////
    		
		OSType				mMacCreator;
		OSType				mMacType;

		short				mRefNum;	
};


/**********************************************************************************************/
FBL_End_Namespace

#endif // FBL_MAC

#include <VShared/FBL/publ/Headers/FBL_post_header.h>

#endif // _FBL_File_Mac_h

